package com.jackiechan.dao;

import com.jackiechan.domain.Courses;
import com.jackiechan.vo.QueryParam;
import org.apache.ibatis.annotations.Param;

import java.util.List;
import java.util.Map;

public interface CoursesDao {
    public List<Courses> selectCourses();
    public Courses selectCoursesByCno(String s);
    /** 官方推荐，必会
     * 多个参数：命名参数，在形参定义的前面加入@Param("自定义参数名称”）
     */
    public List<Courses> selectMultiParam(@Param("mycname") String cname,@Param("mytno") Integer tno);
    /** 必会
     * 多个参数：使用java对象作为接口中方法的参数
     * 参数param的类型不限定，即可以用已有的类型，如Courses类
     */
    public List<Courses> selectMultiObject(QueryParam param);
    /** 容易出错，不建议
     * 多个参数，按位置参数
     * mybatis3.3版本以前使用#{0},#{1}
     * mybatis3.4版本开始使用#{arg0},#{arg1}
     */
    public List<Courses> selectMultiPosition(String cname,Integer tno);
    /** key太灵活，map的key数量也不知道，可读性很差，不推荐
     * 多个参数，用Map的key传递value
     */
    public List<Courses> selectMultiByMap(Map<String,Object> map);

    public List<Courses> selectUse$Order(@Param("colName") String colName);

    /**
     * 返回简单类型
     */
    public int countCourses();

    public List<Courses> selectCourses2();
    /**
     * 动态SQL：使用if标签
     */
    public List<Courses> selectCoursesIf(Courses courses);
    public List<Courses> selectCoursesWhere(Courses courses);
    public List<Courses> selectCoursesForeachOne(List<Integer> tnolist);
    public List<Courses> selectCoursesForeachTwo(List<Courses> courselist);
    public List<Courses> selectAllCourese();
}
